package com.novanok.googledocxlstest;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.provider.Settings;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;

import com.novanok.googledocxlstest.Comun.Comun;
import com.novanok.googledocxlstest.dao.DAODispositivo;
import com.novanok.googledocxlstest.entidad.Cliente;
import com.novanok.googledocxlstest.entidad.ConsumidorNube;
import com.novanok.googledocxlstest.entidad.estado.EstadoEliminado;
import com.novanok.googledocxlstest.entidad.Monitor;
import com.novanok.googledocxlstest.entidad.estadosync.EstadoSincronizacionNoSincronizado;

import java.util.ArrayList;


public class MyActivity extends Activity {

    private static ArrayList<Cliente> listaClientes;
    private static Monitor monitor;
    private static ArrayList<ConsumidorNube> consumidores;
    private boolean procesa;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_my );

        this.setProcesa(true);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        Comun.setDispositivoId(Settings.Secure.getString(MyActivity.this.getContentResolver(), Settings.Secure.ANDROID_ID));

        listaClientes = new ArrayList<Cliente>();
        monitor = new Monitor();
        consumidores = new ArrayList<ConsumidorNube>();
        for ( int i = 0; i < Comun.getCantidadConsumidores(); i++ ){
            consumidores.add( new ConsumidorNube( monitor ) );
        }

        this.cargar();

        new Thread( new Runnable() {
            @Override
            public void run() {
                while( isProcesa() ){
                    try {
                        DAODispositivo dao = new DAODispositivo();
                        dao.guardar(listaClientes, MyActivity.this);

                        Thread.sleep( 2000 );
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        actualizarClientes();
    }

    @Override
    protected void onResume(){
        super.onResume();
        actualizarClientes();
    }

    @Override
    public boolean onCreateOptionsMenu( Menu menu ) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.detalle, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch ( item.getItemId() ) {
            case R.id.nuevo:
                Intent a = new Intent(MyActivity.this, ClienteItemActivity.class);
                startActivity(a);

                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public static ArrayList<Cliente> getListaClientes() {
        return listaClientes;
    }

    public static Monitor getMonitor(){
        return monitor;
    }

    public void eliminar(View v){
        ListaClienteAdapter adapter = ( ListaClienteAdapter )( ( ListView ) findViewById( R.id.lstClientes ) ).getAdapter();
        final Cliente clienteSeleccionado = adapter.getItem( ( ( ListView ) findViewById( R.id.lstClientes ) ).getPositionForView( v ) );

        new AlertDialog.Builder( this )
                .setIcon( android.R.drawable.ic_dialog_info )
                .setTitle( MyActivity.this.getResources().getString( R.string.mensaje_titulo ) )
                .setMessage( MyActivity.this.getResources().getString( R.string.mensaje_eliminacion ) )
                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick( DialogInterface dialogInterface, int i ) {
                        MyActivity.this.eliminarCliente( clienteSeleccionado );
                    }
                })
                .setNegativeButton("NO", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick( DialogInterface dialogInterface, int i ) {
                        // NO SE HACE NADA.
                    }
                })
                .show();
    }

    public void cargar(){
        DAODispositivo dao = new DAODispositivo();

        ArrayList<Cliente> dato = (ArrayList<Cliente>)dao.cargar( MyActivity.this );

        if ( dato != null ) {
            listaClientes = dato;
            for ( Cliente c : listaClientes ) {
                if ( c.getEstadoNube() instanceof EstadoSincronizacionNoSincronizado ) {
                    monitor.addClienteANube( c );
                }
            }
        }
    }

    private void actualizarClientes() {
        (( ListView ) MyActivity.this.findViewById( R.id.lstClientes )).setAdapter(
                new ListaClienteAdapter( MyActivity.this, listaClientes ));
//        SpreadsheetService spreadsheet= new SpreadsheetService("v1");
//        spreadsheet.setProtocolVersion(SpreadsheetService.Versions.V3);
//
//        try {
//            spreadsheet.setUserCredentials("marcosdonalisio@gmail.com", "marcos30970084");
//            URL metafeedUrl = new URL( Comun.getUrl() );
//            SpreadsheetFeed feed = spreadsheet.getFeed( metafeedUrl, SpreadsheetFeed.class );
//
//            SpreadsheetEntry sp = feed.getEntries().get(0);
//            WorksheetEntry w =  sp.getWorksheets().get(0);
//
//            URL listFeedUrl = new URI( w.getListFeedUrl().toString() + "?tq=select%20a,%20b,%20c%20where%20a%20=%20'" + Comun.getDispositivoId() + "'" ).toURL();
//            ListFeed listFeed = spreadsheet.getFeed( listFeedUrl, ListFeed.class );
//
//            listaClientes.clear();
//            for ( ListEntry map : listFeed.getEntries() ){
//                Cliente c = new Cliente();
//
//                c.setNombre( map.getCustomElements().getValue("firstname") );
//                c.setApellido(map.getCustomElements().getValue("lastname"));
//                c.setId( map.getId() );
//
//                listaClientes.add( c );
//            }
//
//            (( ListView ) MyActivity.this.findViewById( R.id.lstClientes )).setAdapter(
//                    new ListaClienteAdapter( MyActivity.this, listaClientes ));
//
//        } catch ( Exception e ) {
//            e.printStackTrace();
//        }
    }

    private void eliminarCliente( Cliente c ){
        c.setEstado( new EstadoEliminado() );
        monitor.addClienteANube(c);
        listaClientes.remove(c);
        this.actualizarClientes();
    }

    public boolean isProcesa() {
        return procesa;
    }

    public void setProcesa(boolean procesa) {
        this.procesa = procesa;
    }
}
